package com.nd.teamfile.fileexplorer.sdk.type;

import java.util.HashMap;

/**
 * 媒体文件类
 * 
 * @ClassName MediaFile
 * @Function TODO ADD FUNCTION
 * @Reason TODO ADD REASON
 * 
 * @author HuangYK
 * @version v1.3.3
 * @Date 2014-1-24 下午3:43:36
 * 
 * @see
 */
public class MediaFile {

	// 音频文件类型
	private static final int FILE_TYPE_MP3 = 1;
	private static final int FILE_TYPE_M4A = 2;
	private static final int FILE_TYPE_WAV = 3;
	private static final int FILE_TYPE_AMR = 4;
	private static final int FILE_TYPE_AWB = 5;
	private static final int FILE_TYPE_WMA = 6;
	private static final int FILE_TYPE_OGG = 7;
	private static final int FILE_TYPE_OGA = 8;
	private static final int FILE_TYPE_AAC = 9;
	private static final int FILE_TYPE_MKA = 10;
	private static final int FILE_TYPE_FLAC = 11;
	private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3;
	private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC;

	// 视频文件类型
	private static final int FILE_TYPE_MP4 = 21;
	private static final int FILE_TYPE_M4V = 22;
	private static final int FILE_TYPE_3GPP = 23;
	private static final int FILE_TYPE_3GPP2 = 24;
	private static final int FILE_TYPE_WMV = 25;
	private static final int FILE_TYPE_ASF = 26;
	private static final int FILE_TYPE_MKV = 27;
	private static final int FILE_TYPE_MP2TS = 28;
	private static final int FILE_TYPE_AVI = 29;
	private static final int FILE_TYPE_WEBM = 30;
	private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;
	private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WEBM;

	// 图片文件类型
	private static final int FILE_TYPE_JPEG = 31;
	private static final int FILE_TYPE_GIF = 32;
	private static final int FILE_TYPE_PNG = 33;
	private static final int FILE_TYPE_BMP = 34;
	private static final int FILE_TYPE_WBMP = 35;
	private static final int FILE_TYPE_WEBP = 36;
	private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;
	private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WEBP;

	private static HashMap<String, Integer> sFileTypeMap = new HashMap<String, Integer>();

	static void addFileType(String extension, int fileType) {
		sFileTypeMap.put(extension, fileType);
	}

	// 设置需要特殊处理的文件类型
	static {
		{// 音频
			addFileType("MP3", FILE_TYPE_MP3);
			addFileType("M4A", FILE_TYPE_M4A);
			addFileType("WAV", FILE_TYPE_WAV);
			addFileType("AMR", FILE_TYPE_AMR);
			addFileType("AWB", FILE_TYPE_AWB);
			addFileType("AWB", FILE_TYPE_AWB);
			addFileType("WMA", FILE_TYPE_WMA);
			addFileType("OGG", FILE_TYPE_OGG);
			addFileType("OGA", FILE_TYPE_OGA);
			addFileType("AAC", FILE_TYPE_AAC);
			addFileType("MKA", FILE_TYPE_MKA);
		}
		{// 视频
			addFileType("MPEG", FILE_TYPE_MP4);
			addFileType("MPG", FILE_TYPE_MP4);
			addFileType("MP4", FILE_TYPE_MP4);
			addFileType("M4V", FILE_TYPE_M4V);
			addFileType("3GP", FILE_TYPE_3GPP);
			addFileType("3GPP", FILE_TYPE_3GPP);
			addFileType("3G2", FILE_TYPE_3GPP2);
			addFileType("3GPP2", FILE_TYPE_3GPP2);
			addFileType("WMV", FILE_TYPE_WMV);
			addFileType("ASF", FILE_TYPE_ASF);
			addFileType("MKV", FILE_TYPE_MKV);
			addFileType("WEBM", FILE_TYPE_WEBM);
			addFileType("TS", FILE_TYPE_MP2TS);
			addFileType("AVI", FILE_TYPE_AVI);
		}
		{// 图片
			addFileType("JPG", FILE_TYPE_JPEG);
			addFileType("JPEG", FILE_TYPE_JPEG);
			addFileType("GIF", FILE_TYPE_GIF);
			addFileType("PNG", FILE_TYPE_PNG);
			addFileType("BMP", FILE_TYPE_BMP);
			addFileType("WBMP", FILE_TYPE_WBMP);
			addFileType("WEBP", FILE_TYPE_WEBP);
		}
	}

	/**
	 * 是否是视频文件
	 * 
	 * @n<b>函数名称</b> :isVideoFileType
	 * @brief
	 * @see
	 * @version Ver 1.3.3
	 * @param @param fileType
	 * @param @return
	 * @return boolean
	 * @<b>作者</b> : HuangYK
	 * @<b>创建时间</b> : 2014-1-26下午12:54:29
	 */
	public static boolean isVideoFileType(int fileType) {
		return (fileType >= FIRST_VIDEO_FILE_TYPE && fileType <= LAST_VIDEO_FILE_TYPE);
	}

	/**
	 * 是否是图片文件
	 * 
	 * @n<b>函数名称</b> :isImageFileType
	 * @brief
	 * @see
	 * @version Ver 1.3.3
	 * @param @param fileType
	 * @param @return
	 * @return boolean
	 * @<b>作者</b> : HuangYK
	 * @<b>创建时间</b> : 2014-1-26下午12:54:43
	 */
	public static boolean isImageFileType(int fileType) {
		return (fileType >= FIRST_IMAGE_FILE_TYPE && fileType <= LAST_IMAGE_FILE_TYPE);
	}

	/**
	 * 是否是音频文件
	 * 
	 * @n<b>函数名称</b> :isAudioFileType
	 * @brief
	 * @see
	 * @version Ver 1.3.3
	 * @param @param fileType
	 * @param @return
	 * @return boolean
	 * @<b>作者</b> : HuangYK
	 * @<b>创建时间</b> : 2014-1-26下午12:57:31
	 */
	public static boolean isAudioFileType(int fileType) {
		return (fileType >= FIRST_AUDIO_FILE_TYPE && fileType <= LAST_AUDIO_FILE_TYPE);
	}

	/**
	 * 根据文件路径获取文件类型(文件浏览不判断具体的MIME)
	 * 
	 * @n<b>函数名称</b> :getFileType
	 * @brief
	 * @see
	 * @version Ver 1.3.3
	 * @param @param path
	 * @param @return
	 * @return int
	 * @<b>作者</b> : HuangYK
	 * @<b>创建时间</b> : 2014-1-26下午1:01:29
	 */
	public static int getFileType(String path) {
		int lastDot = path.lastIndexOf(".");
		if (lastDot < 0)
			return -1;
		String key = path.substring(lastDot + 1).toUpperCase();
		if (!sFileTypeMap.containsKey(key))
			return -1;
		return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase());
	}
}
